<!DOCTYPE html>
<html>
<head hexo-theme='https://volantis.js.org/#3.0-beta2'>
  <meta charset="utf-8">
  <!-- SEO相关 -->
  
    
  
  <!-- 渲染优化 -->
  <meta name="renderer" content="webkit">
  <meta name="force-rendering" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
  <meta name="HandheldFriendly" content="True" >
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

  <!-- 页面元数据 -->
  
  <title>PHP 入门之路 - 河豚吞吞</title>
  
    <meta name="keywords" content="PHP">
  

  
    <meta name="description" content="Never too late to learn. ">
  

  <!-- feed -->
  

  <!-- import meta -->
  
    
      <meta name="msapplication-TileColor" content="#ffffff">
    
      <meta name="msapplication-config" content="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/browserconfig.xml">
    
      <meta name="theme-color" content="#ffffff">
    
  

  <!-- link -->
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.13/css/all.min.css">
  
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css">


  
    
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.css">

  

  

  
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.css">
  

  

  <!-- import link -->
  
  
  <link rel="apple-touch-icon" sizes="180x180" href="/lemonElf/img/icon/icon001.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/lemonElf/img/icon/icon001.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/lemonElf/img/icon/icon001.png">
  <link rel="manifest" href="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/blog/favicon/site.webmanifest">
  <link rel="mask-icon" href="/lemonElf/img/icon/icon001.png" color="#5bbad5">
  <link rel="shortcut icon" href="/lemonElf/img/icon/icon001.png">
  

  
  
    
<link rel="stylesheet" href="/lemonelf/css/style.css">

  

  
  
</head>

<body>
  
  
  
  <div class="cover-wrapper">
    <cover class='cover post' style="display: none;">
      <div class='cover-body'>
  <div class='a'>
    
    
      <p class="title">MissGlobeFish</p>
    
    
      <p class="subtitle">When the world turns its back on you, you turn your back on the world! And only embrace whats next!</p>
    
  </div>
  <div class='b'>
    <div class='menu navigation dock'>
      <div class='list-h'>
        
          
            <a href="/lemonelf/"
              
              
              id="lemonelf">
              <img src='https://i.loli.net/2020/07/24/skczZ1VdMGRbTLi.png'><p>主页</p>
            </a>
          
            <a href="/lemonelf/archives/"
              
              
              id="lemonelfarchives">
              <img src='https://i.loli.net/2020/07/24/GaeXvVAdtJkCYT3.png'><p>归档</p>
            </a>
          
            <a href="/lemonelf/categories/"
              
              
              id="lemonelfcategories">
              <img src='https://i.loli.net/2020/07/24/9kHJZNA8m4RBxhp.png'><p>分类</p>
            </a>
          
            <a href="/lemonelf/friends/"
              
              
              id="lemonelffriends">
              <img src='https://i.loli.net/2020/07/24/cxRslyWzk2OTP9r.png'><p>友链</p>
            </a>
          
        
      </div>
    </div>
  </div>
</div>

      <div class="scroll-down" style="display: none;"><i class="fa fa-chevron-down scroll-down-effects"></i></div>
    </cover>
    <header class="l_header shadow blur">
  <div class='container'>
  <div class='wrapper'>
    <div class='nav-sub'>
      <p class="title"></p>
      <ul class='switcher nav-list-h' id="pjax-header-nav-list">
        <li><a class="s-comment fas fa-comments fa-fw" target="_self" href='javascript:void(0)'></a></li>
        
          <li><a class="s-toc fas fa-list fa-fw" target="_self" href='javascript:void(0)'></a></li>
        
      </ul>
    </div>
		<div class="nav-main">
      
        
        <a class="title flat-box" target="_self" href='/lemonelf/'>
          
          
          
            MissGlobeFish
          
        </a>
      

			<div class='menu navigation'>
				<ul class='nav-list-h'>
          
          
          
            
            
              <li>
                <a class="menuitem flat-box" href=/lemonelf/categories/
                  
                  
                  
                    id="lemonelfcategories"
                  >
                  <i class='fas fa-folder-open fa-fw'></i>分类
                </a>
                
              </li>
            
          
          
            
            
              <li>
                <a class="menuitem flat-box" href=/lemonelf/tags/
                  
                  
                  
                    id="lemonelftags"
                  >
                  <i class='fas fa-tags fa-fw'></i>标签
                </a>
                
              </li>
            
          
          
            
            
              <li>
                <a class="menuitem flat-box" href=/lemonelf/archives/
                  
                  
                  
                    id="lemonelfarchives"
                  >
                  <i class='fas fa-archive fa-fw'></i>归档
                </a>
                
              </li>
            
          
          
            
            
              <li>
                <a class="menuitem flat-box" href=/lemonelf/friends/
                  
                  
                  
                    id="lemonelffriends"
                  >
                  <i class='fas fa-link fa-fw'></i>友链
                </a>
                
              </li>
            
          
          
            
            
              <li>
                <a class="menuitem flat-box" href=/lemonelf/about/
                  
                  
                  
                    id="lemonelfabout"
                  >
                  <i class='fas fa-info-circle fa-fw'></i>关于
                </a>
                
              </li>
            
          
          
				</ul>
			</div>

      <div class="m_search">
        <form name="searchform" class="form u-search-form">
          <i class="icon fas fa-search fa-fw"></i>
          <input type="text" class="input u-search-input" placeholder="Search..." />
        </form>
      </div>

			<ul class='switcher nav-list-h'>
				
					<li><a class="s-search fas fa-search fa-fw" target="_self" href='javascript:void(0)'></a></li>
				
				<li>
          <a class="s-menu fas fa-bars fa-fw" target="_self" href='javascript:void(0)'></a>
          <ul class="menu-phone list-v navigation white-box">
            
              
            
              <li>
                <a class="menuitem flat-box" href=/lemonelf/categories/
                  
                  
                  
                    id="lemonelfcategories"
                  >
                  <i class='fas fa-folder-open fa-fw'></i>分类
                </a>
                
              </li>
            
          
            
              
            
              <li>
                <a class="menuitem flat-box" href=/lemonelf/tags/
                  
                  
                  
                    id="lemonelftags"
                  >
                  <i class='fas fa-tags fa-fw'></i>标签
                </a>
                
              </li>
            
          
            
              
            
              <li>
                <a class="menuitem flat-box" href=/lemonelf/archives/
                  
                  
                  
                    id="lemonelfarchives"
                  >
                  <i class='fas fa-archive fa-fw'></i>归档
                </a>
                
              </li>
            
          
            
              
            
              <li>
                <a class="menuitem flat-box" href=/lemonelf/friends/
                  
                  
                  
                    id="lemonelffriends"
                  >
                  <i class='fas fa-link fa-fw'></i>友链
                </a>
                
              </li>
            
          
            
              
            
              <li>
                <a class="menuitem flat-box" href=/lemonelf/about/
                  
                  
                  
                    id="lemonelfabout"
                  >
                  <i class='fas fa-info-circle fa-fw'></i>关于
                </a>
                
              </li>
            
          
            
          </ul>
        </li>
			</ul>
		</div>
	</div>
  </div>
</header>

  </div>
  


  <div class="l_body nocover">
    <div class='body-wrapper' id="pjax-container">
      
        <!--此文件用来存放一些不方便取值的变量-->
<!--思路大概是将值藏到重加载的区域内-->



<div id="pjax-data" style="display: none">
  <div id="pjax-ispage">true</div>
  <div id="pjax-pageTitle">PHP 入门之路</div>
  <div id="pjax-enable-cover">true</div>
  <div id="pjax-permalink">https://missglobefish.gitee.io/lemonelf/2020/08/13/PHP%20%E5%85%A5%E9%97%A8%E4%B9%8B%E8%B7%AF/</div>
  
  <div id="valine-path">none</div>
  <div id="valine-placeholder">none</div>
  
  
</div>


<script>
  // 处理封面 此时 jquery 还没加载
  if ("none" == "none") { // 移除封面
    document.getElementsByClassName('cover')[0].style.display = "none";
    document.getElementsByClassName('l_body')[0].classList.add("nocover");
    document.getElementsByClassName('l_header', 'cover-wrapper')[0].classList.add("show");
  } else {
    if ("none" == "blog") { // 半屏
      document.getElementsByClassName('cover')[0].classList.remove("full");
      document.getElementsByClassName('cover')[0].classList.add("half");
      document.getElementsByClassName('scroll-down')[0].style.display = "none";
    } else if ("none" == "docs") { // 全屏
      document.getElementsByClassName('cover')[0].classList.remove("half");
      document.getElementsByClassName('cover')[0].classList.add("full");
      document.getElementsByClassName('scroll-down')[0].style.display = "";
    }
    document.getElementsByClassName('cover')[0].style.display = "";
    document.getElementsByClassName('l_body', 'show')[0].classList.remove("nocover");
    document.getElementsByClassName('l_header', 'cover-wrapper')[0].classList.remove("show");
  }
</script>

      
      

<div class='l_main'>
  

  
    <article id="post" class="post white-box reveal shadow article-type-post" itemscope itemprop="blogPost">
      


  <section class='meta'>
    
      
      
        <a title='PHP 入门之路' href='/lemonelf/2020/08/13/PHP%20%E5%85%A5%E9%97%A8%E4%B9%8B%E8%B7%AF/'><img class='thumbnail' src='https://img.vim-cn.com/17/0c7b02722686d1527a1df807dae0794d995860.png'></a>
      
      <div class="meta" id="header-meta">
        
          
  <h1 class="title">
    <a href="/lemonelf/2020/08/13/PHP%20%E5%85%A5%E9%97%A8%E4%B9%8B%E8%B7%AF/">
      PHP 入门之路
    </a>
  </h1>


        
        <div class='new-meta-box'>
          
            
          
            
              
<div class='new-meta-item author'>
  <a class='author' href="/" rel="nofollow">
    <img no-lazy src="https://pic4.zhimg.com/80/v2-52584915d42d676148e2c302f4e87382_hd.jpg">
    <p>MissGlobeFish</p>
  </a>
</div>

            
          
            
              
  
  <div class='new-meta-item category'>
    <a href='/lemonelf/categories/%E7%9F%A5%E8%AF%86%E5%BB%B6%E4%BC%B8/' rel="nofollow">
      <i class="fas fa-folder-open fa-fw" aria-hidden="true"></i>
      <p>知识延伸</p>
    </a>
  </div>


            
          
            
              <div class="new-meta-item date">
  <a class='notlink'>
    <i class="fas fa-calendar-alt fa-fw" aria-hidden="true"></i>
    <p>发布于：2020-08-13</p>
  </a>
</div>

            
          
            
              

            
          
        </div>
        
          <hr>
        
      </div>
    
  </section>


      <section class="article typo">
        <div class="article-entry" itemprop="articleBody">
          
          
          <p>Never too late to learn. </p>
<a id="more"></a>

<blockquote>
<p><strong>1. 环境搭建 &amp; 编辑器的安装</strong></p>
</blockquote>
<h4 id="1-0-环境搭建"><a href="#1-0-环境搭建" class="headerlink" title="1.0 环境搭建"></a>1.0 环境搭建</h4><h5 id="1-0-1-Linux-系统"><a href="#1-0-1-Linux-系统" class="headerlink" title="1.0.1 Linux 系统"></a>1.0.1 Linux 系统</h5><p>@ LAMP： Linux + Apache + MySQL + PHP</p>
<p>@ LNMP： Linux + Nginx + MySQL + PHP</p>
<p>@ LNMPA： Linux + Nginx + MySQL + PHP + Apache</p>
<h5 id="1-0-2-Window-系统"><a href="#1-0-2-Window-系统" class="headerlink" title="1.0.2 Window 系统"></a>1.0.2 Window 系统</h5><p>@ 独立安装： Window + Apache( 2.4 ) + MySQL( 5.7 ) + PHP( 7.1 )</p>
<p>@ 集成环境： wampserver、xampp、phpstudy</p>
<h4 id="1-1-编辑器安装"><a href="#1-1-编辑器安装" class="headerlink" title="1.1 编辑器安装"></a>1.1 编辑器安装</h4><p>@ 推荐编辑器： <a target="_blank" rel="noopener" href="https://atom.io/">Atom</a>、 <a target="_blank" rel="noopener" href="https://sublimetextcn.com/">Sublime Text3</a>、PHPStorm、<a target="_blank" rel="noopener" href="https://www.zend.com/products/zend-studio">ZendStudio</a></p>
<blockquote>
<p><strong>2. 基础语法【 <a target="_blank" rel="noopener" href="https://www.php.net/manual/zh/langref.php"> PHP语法手册 </a> 】</strong></p>
</blockquote>
<h4 id="2-0-文档结构"><a href="#2-0-文档结构" class="headerlink" title="2.0 文档结构"></a>2.0 文档结构</h4><p>@ 文件扩展名（ <code>.php</code> ）</p>
<p>【 注意 】文件名不要使用中文，也不要包含特殊字符。</p>
<h4 id="2-1-标记"><a href="#2-1-标记" class="headerlink" title="2.1 标记"></a>2.1 标记</h4><h5 id="2-1-0-标准风格"><a href="#2-1-0-标准风格" class="headerlink" title="2.1.0 标准风格"></a>2.1.0 标准风格</h5><p><code>&lt;?php  代码段; ?&gt;</code></p>
<p>【 注意1 】如果文档中只有 PHP 代码，结束标记要省略掉。</p>
<p>【 注意2 】如果文档中不只有 PHP 代码，一定要保证 PHP 的开始和结束标记成对出现，可以出现任意位置，任意多次都可以。</p>
<h5 id="2-1-1-短风格"><a href="#2-1-1-短风格" class="headerlink" title="2.1.1 短风格"></a>2.1.1 短风格</h5><p><code>&lt;? 代码段; ?&gt;</code></p>
<p>【 注意 】需要配置 PHP 配置文件 <code>php.ini</code> 中 <code>short_open_tag=On</code> ,重启 <code>Apache</code> 服务器即可。</p>
<h5 id="2-1-2-ASP风格"><a href="#2-1-2-ASP风格" class="headerlink" title="2.1.2 ASP风格"></a>2.1.2 ASP风格</h5><p><code>&lt;% 代码段; %&gt;</code></p>
<p>【 注意 】需要配置 PHP 配置文件 <code>php.ini</code> 中 <code>asp_tags=On</code> ,重启 <code>Apache</code> 服务器即可。</p>
<h4 id="2-2-文档组成"><a href="#2-2-文档组成" class="headerlink" title="2.2 文档组成"></a>2.2 文档组成</h4><p>@ <code>PHP代码</code>  <code>HTML</code>  <code>CSS</code>  <code>JS</code>  <code>Jquery</code></p>
<h4 id="2-3-语法规范"><a href="#2-3-语法规范" class="headerlink" title="2.3 语法规范"></a>2.3 语法规范</h4><p>@ PHP 代码以英文的分号结束 ; </p>
<h4 id="2-4-注释"><a href="#2-4-注释" class="headerlink" title="2.4 注释"></a>2.4 注释</h4><p>@ 单行注释： <code>// 注释内容</code>（ C++ 风格的注释 ）、<code># 注释内容</code>（ shell 风格 ）</p>
<p>@ 多行注释： <code>/* 注释内容 */</code></p>
<blockquote>
<p><strong>3. 变量 【 在程序执行期间可以变化的量就是变量，通过变量保存值 】</strong></p>
</blockquote>
<h4 id="3-0-声明变量"><a href="#3-0-声明变量" class="headerlink" title="3.0 声明变量"></a>3.0 声明变量</h4><p>@ 通过美元 <code>$</code> 变量名称来表示变量，可以声明变量在使用，也可以不声明，可以一次声明一个，也可以一次声明多个。</p>
<p>@ （ 驼峰标记法 ）<code>firstName、lastName、zendControllerFront</code> &amp; <code>FirstName、LastName、ZendControllerFront</code></p>
<p>@ （ 下划线法 ）<code>first_name、last_name、zend_controller_front</code></p>
<p>【 注意1 】变量名称以字母或者下划线开始，后面跟上数字、字母下划线，不能包含特殊字符。</p>
<p>【 注意2 】变量名称严格区分大小写，<code>$a</code> 和 <code>$A</code> 这是两个变量。</p>
<p>【 注意3 】如果变量名称重复，后面的变量会覆盖之前变量的值。</p>
<p>【 注意4 】PHP 是弱类型语言，变量可以不声明直接使用。</p>
<h4 id="3-1-使用变量"><a href="#3-1-使用变量" class="headerlink" title="3.1 使用变量"></a>3.1 使用变量</h4><p>@ 直接书写变量的名称即可： <code>$ 变量名称</code></p>
<blockquote>
<p><strong>4. 数据类型</strong></p>
</blockquote>
<h4 id="4-0-主要数据类型"><a href="#4-0-主要数据类型" class="headerlink" title="4.0 主要数据类型"></a>4.0 主要数据类型</h4><h5 id="4-0-0-标量类型-只能存储单一数据"><a href="#4-0-0-标量类型-只能存储单一数据" class="headerlink" title="4.0.0 标量类型 ( 只能存储单一数据 )"></a>4.0.0 标量类型 ( 只能存储单一数据 )</h5><h6 id="4-0-0-0-定界符"><a href="#4-0-0-0-定界符" class="headerlink" title="4.0.0.0 定界符"></a>4.0.0.0 定界符</h6><p><code>整型 ( int | integer )</code></p>
<p>@ 分类： 十进制、八进制、十六进制</p>
<p>@ 范围： 带符号，<code>-21</code> 亿到 <code>21</code> 亿之间，不带符号 <code>0</code> 到 <code>42</code> 亿 （ 超过整型存储范围，会产生溢出的现象 ）</p>
<p><code>浮点型 ( float | double | real )</code></p>
<p>@ 带小数点</p>
<p>@ 科学计数法的写法，<code>e</code> 或者 <code>E</code></p>
<p>【 注意 】浮点数是有误差，不要比较两个浮点数的大小。</p>
<p><code>布尔型 ( bool | boolean ) </code></p>
<p>@ 要么是真（ true | TRUE ），要么是假（ false | FALSE ）</p>
<p><code>字符串型 ( string )</code></p>
<p>@ 单引号、双引号表示</p>
<p>@ <code>heredoc</code>： </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&lt;&lt;&lt; 名称</span><br><span class="line">代码段;</span><br><span class="line">名称;</span><br></pre></td></tr></table></figure>

<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&lt;&lt;&lt;&quot;名称&quot;</span><br><span class="line">代码段;</span><br><span class="line">名称</span><br></pre></td></tr></table></figure>

<p>【 注意 】在结束名称之前不能有任何输出（ <code>heredoc</code> 相当于双引号 ）。</p>
<p>@ <code>nowdoc</code>:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&lt;&lt;&lt;&#39;名称&#39;</span><br><span class="line">代码段;</span><br><span class="line">名称</span><br></pre></td></tr></table></figure>

<p>【 注意 】<code>nowdoc</code> 相当于单引号的作用。</p>
<p>@ 单引号和双引号的区别（ 单引号不解析变量，双引号解析变量；单引号只解析 <code>\&#39;</code> 【 反斜杠点 】 和 <code>\\</code> 【 双反斜杠 】,而双引号解析所有的转义符 ）</p>
<h6 id="4-0-0-1-转义符"><a href="#4-0-0-1-转义符" class="headerlink" title="4.0.0.1 转义符"></a>4.0.0.1 转义符</h6><table>
<thead>
<tr>
<th align="center">符号</th>
<th align="center">意义</th>
<th align="center">显示</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>\n</code></td>
<td align="center">换行</td>
<td align="center">源代码中有效果，页面上只显示一个空格</td>
</tr>
<tr>
<td align="center"><code>\r</code></td>
<td align="center">回车</td>
<td align="center">源代码中有效果，页面上只显示一个空格</td>
</tr>
<tr>
<td align="center"><code>\t</code></td>
<td align="center">水平制表符</td>
<td align="center">源代码中有效果，页面上只显示一个空格</td>
</tr>
<tr>
<td align="center"><code>\\</code></td>
<td align="center"><code>\</code></td>
<td align="center"></td>
</tr>
<tr>
<td align="center"><code>\$</code></td>
<td align="center"><code>$</code></td>
<td align="center"></td>
</tr>
<tr>
<td align="center"><code>\&#39;</code></td>
<td align="center"><code>&#39;</code></td>
<td align="center"></td>
</tr>
<tr>
<td align="center"><code>\*</code></td>
<td align="center"><code>&quot;</code></td>
<td align="center"></td>
</tr>
</tbody></table>
<h6 id="4-0-0-2-花括号"><a href="#4-0-0-2-花括号" class="headerlink" title="4.0.0.2 花括号"></a>4.0.0.2 花括号</h6><p>@ 可以将 PHP 中的变量括成一个整体来解析：</p>
<p><code>&#123; $变量名称 &#125; || $&#123; 变量名称 &#125; </code></p>
<p>@ 可以对字符串中的指定字符做增删改查的操作（ 字符串的下标从 0 开始、根据下标找到对应的字符做操作）。</p>
<h5 id="4-0-1-复合类型"><a href="#4-0-1-复合类型" class="headerlink" title="4.0.1 复合类型"></a>4.0.1 复合类型</h5><p><code>数组 ( Array )</code></p>
<p><code>对象 ( Object )</code></p>
<h5 id="4-0-2-特殊类型"><a href="#4-0-2-特殊类型" class="headerlink" title="4.0.2 特殊类型"></a>4.0.2 特殊类型</h5><p><code>资源 ( Resource )</code></p>
<p><code>空 ( null | NULL )</code></p>
<p>@ 变量未声明直接使用，它的值就是 <code>null</code>。</p>
<p>@ 声明一个变量并且赋值为 <code>null</code>。</p>
<p>@ 经过 <code>unset()</code> 注销过的变量值为 <code>null</code>。</p>
<h4 id="4-1-伪类型"><a href="#4-1-伪类型" class="headerlink" title="4.1 伪类型"></a>4.1 伪类型</h4><p><code>number</code>  <code>mixed</code>  <code>callback</code>  <code>void</code>  <code>...</code></p>
<blockquote>
<p><strong>5. 数据类型转换</strong></p>
</blockquote>
<h4 id="5-0-自动转换-隐式转换-—-【-程序会根据上下文环境自动的进行转换-】"><a href="#5-0-自动转换-隐式转换-—-【-程序会根据上下文环境自动的进行转换-】" class="headerlink" title="5.0 自动转换 ( 隐式转换 ) — 【 程序会根据上下文环境自动的进行转换 】"></a>5.0 自动转换 ( 隐式转换 ) — 【 程序会根据上下文环境自动的进行转换 】</h4><h5 id="5-0-0-其它类型转换成数值型"><a href="#5-0-0-其它类型转换成数值型" class="headerlink" title="5.0.0 其它类型转换成数值型"></a>5.0.0 其它类型转换成数值型</h5><p><code>true -&gt; 1</code>  <code>false -&gt; 0</code>  <code>null -&gt; 0</code></p>
<p>@ 字符串如果以非法数值开始，直接转换成 <code>0</code>；如果字符串以合法数值开始，一直取到第一个非法数值结束</p>
<h5 id="5-0-1-其它类型转换成字符串型"><a href="#5-0-1-其它类型转换成字符串型" class="headerlink" title="5.0.1 其它类型转换成字符串型"></a>5.0.1 其它类型转换成字符串型</h5><p><code>true -&gt; 1</code>  <code>false -&gt; 空字符串</code>  <code>null -&gt; 空字符串</code>  <code>数组 -&gt; Array</code>  <code>资源 -&gt; Resource id #数字</code></p>
<p>@ 数值型直接转换成数值本身</p>
<p>@ 对象不能直接转换成字符串</p>
<h5 id="5-0-2-其它类型转换成布尔类型-【-假-】"><a href="#5-0-2-其它类型转换成布尔类型-【-假-】" class="headerlink" title="5.0.2 其它类型转换成布尔类型 【 假 】"></a>5.0.2 其它类型转换成布尔类型 【 假 】</h5><p><code>0 -&gt; false</code>  <code>0.0 -&gt; false</code>  <code>空字符串 &#39;&#39; 或者 &quot;&quot; 或者 &#39;0&#39; 或者 &quot;0&quot; -&gt; false</code>  <code>null -&gt; false</code>  <code>空数组 array() -&gt; false</code></p>
<h4 id="5-1-强制转换-显示转换"><a href="#5-1-强制转换-显示转换" class="headerlink" title="5.1 强制转换 ( 显示转换 )"></a>5.1 强制转换 ( 显示转换 )</h4><h5 id="5-1-0-临时转换-【-临时转换不改变变量本身的类型-】"><a href="#5-1-0-临时转换-【-临时转换不改变变量本身的类型-】" class="headerlink" title="5.1.0 临时转换 【 临时转换不改变变量本身的类型 】"></a>5.1.0 临时转换 【 临时转换不改变变量本身的类型 】</h5><p>@ 通过变量类型转换</p>
<table>
<thead>
<tr>
<th align="center">类型</th>
<th align="center">方法</th>
</tr>
</thead>
<tbody><tr>
<td align="center">整型</td>
<td align="center"><code>( int )$var</code> &amp; <code>( integer )$var</code></td>
</tr>
<tr>
<td align="center">浮点型</td>
<td align="center"><code>( float &amp; double &amp; real )$var</code></td>
</tr>
<tr>
<td align="center">字符型</td>
<td align="center"><code>( string )$var</code></td>
</tr>
<tr>
<td align="center">布尔型</td>
<td align="center"><code>( bool &amp; boolean )$var</code></td>
</tr>
<tr>
<td align="center">空</td>
<td align="center"><code>( unset )$var</code></td>
</tr>
<tr>
<td align="center">数组</td>
<td align="center"><code>( array )$var</code></td>
</tr>
<tr>
<td align="center">对象</td>
<td align="center"><code>( object )$var</code></td>
</tr>
</tbody></table>
<p>@ 通过系统函数实现</p>
<table>
<thead>
<tr>
<th align="center">函数</th>
<th align="center">作用</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>intval( $var )</code></td>
<td align="center">返回变量转换成整型之后的值</td>
</tr>
<tr>
<td align="center"><code>floatval( $var )</code> &amp; <code>doubleval( $var )</code></td>
<td align="center">返回变量转换成浮点型的值</td>
</tr>
<tr>
<td align="center"><code>strval( $var )</code></td>
<td align="center">返回变量转换成字符串的值</td>
</tr>
<tr>
<td align="center"><code>boolval( $var )</code></td>
<td align="center">返回变量转换成布尔类型的值</td>
</tr>
</tbody></table>
<h5 id="5-1-1-永久转换"><a href="#5-1-1-永久转换" class="headerlink" title="5.1.1 永久转换"></a>5.1.1 永久转换</h5><p><code>settype( $var, $type )</code> 【 设置变量的类型 】</p>
<p><code>gettype( $var )</code> 【 返回变量的类型 】</p>
<p>@ 不要使用 <code>gettype</code> 得到变量的类型，因为后续可能返回值会改变</p>
<h5 id="5-1-2-通过变量函数库检测变量的类型-【-is-var-】"><a href="#5-1-2-通过变量函数库检测变量的类型-【-is-var-】" class="headerlink" title="5.1.2 通过变量函数库检测变量的类型 【 is_*( $var ) 】"></a>5.1.2 通过变量函数库检测变量的类型 【 is_*( $var ) 】</h5><p>@ 检测的结果要么 true，要么 false</p>
<table>
<thead>
<tr>
<th align="center">类型</th>
<th align="center">方法</th>
</tr>
</thead>
<tbody><tr>
<td align="center">整型</td>
<td align="center"><code>is_int( $var )</code> &amp; <code>is_integer( $var )</code> &amp; <code>is_long( $var )</code></td>
</tr>
<tr>
<td align="center">浮点型</td>
<td align="center"><code>is_float( $var )</code> &amp; <code>is_double( $var )</code> &amp; <code>is_real( $var )</code></td>
</tr>
<tr>
<td align="center">字符串型</td>
<td align="center"><code>is_string( $var )</code></td>
</tr>
<tr>
<td align="center">布尔型</td>
<td align="center"><code>is_bool( $var )</code></td>
</tr>
<tr>
<td align="center">标量类型</td>
<td align="center"><code>is_scalar( $var )</code></td>
</tr>
<tr>
<td align="center">空 null</td>
<td align="center"><code>is_null( $var )</code></td>
</tr>
<tr>
<td align="center">数组</td>
<td align="center"><code>is_array( $var )</code></td>
</tr>
<tr>
<td align="center">对象</td>
<td align="center"><code>is_object( $var )</code></td>
</tr>
<tr>
<td align="center">资源</td>
<td align="center"><code>is_resource( $var )</code></td>
</tr>
<tr>
<td align="center">是否为数值型或者字符串形式的数值</td>
<td align="center"><code>is_numeric( $var )</code></td>
</tr>
</tbody></table>
<blockquote>
<p><strong>6. 常量 【 常量是一个简单值的标识符，常量一经定义在脚本执行期间是不能改变 】</strong></p>
</blockquote>
<h4 id="6-0-系统常量-【-PHP-提前给大家提供的，拿来就可以直接使用-】"><a href="#6-0-系统常量-【-PHP-提前给大家提供的，拿来就可以直接使用-】" class="headerlink" title="6.0 系统常量 【 PHP 提前给大家提供的，拿来就可以直接使用 】"></a>6.0 系统常量 【 PHP 提前给大家提供的，拿来就可以直接使用 】</h4><table>
<thead>
<tr>
<th align="center">方法</th>
<th align="center">作用</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>PHP_VERSION</code></td>
<td align="center">PHP 的版本</td>
</tr>
<tr>
<td align="center"><code>PHP_OS</code></td>
<td align="center">PHP 的运行系统</td>
</tr>
<tr>
<td align="center"><code>PHP_INT_MAX</code></td>
<td align="center">整型的最大值</td>
</tr>
</tbody></table>
<h4 id="6-1-自定义常量"><a href="#6-1-自定义常量" class="headerlink" title="6.1 自定义常量"></a>6.1 自定义常量</h4><h5 id="6-1-0-定义常量"><a href="#6-1-0-定义常量" class="headerlink" title="6.1.0 定义常量"></a>6.1.0 定义常量</h5><p>@ define() 函数定义常量  <code>define( $name, $value )</code></p>
<p>【 注意1 】常量名称不加 $ 。</p>
<p>【 注意2 】常量名称最好大写，以字母或者下划线开始。</p>
<p>【 注意3 】常量默认区分大小写。</p>
<p>【 注意4 】常量作用域是全局。</p>
<p>【 注意5 】常量一经定义，在脚本执行期间是不能改变的。</p>
<p>【 注意6 】常量的值可以是标量类型，也可以是数组。</p>
<p>@ const 关键字定义常量  <code>const NAME = 值;</code></p>
<h5 id="6-1-1-使用常量-【-直接使用常量的名称即可-】"><a href="#6-1-1-使用常量-【-直接使用常量的名称即可-】" class="headerlink" title="6.1.1 使用常量 【 直接使用常量的名称即可 】"></a>6.1.1 使用常量 【 直接使用常量的名称即可 】</h5><p><code>constant( $name )</code></p>
<h5 id="6-1-2-检测常量是否存在"><a href="#6-1-2-检测常量是否存在" class="headerlink" title="6.1.2 检测常量是否存在"></a>6.1.2 检测常量是否存在</h5><p><code>defined( $name )</code>  【 检测常量名称是否存在，如果存在返回 true，否则返回 false 】</p>
<h5 id="6-1-3-获取所有已定义的常量"><a href="#6-1-3-获取所有已定义的常量" class="headerlink" title="6.1.3 获取所有已定义的常量"></a>6.1.3 获取所有已定义的常量</h5><p><code>get_defined_constants()</code>  【 返回的是包含系统常量和自定义常量的数组 】</p>
<h4 id="6-2-魔术常量"><a href="#6-2-魔术常量" class="headerlink" title="6.2 魔术常量"></a>6.2 魔术常量</h4><table>
<thead>
<tr>
<th align="center">常量</th>
<th align="center">作用</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>__LINE__</code></td>
<td align="center">得到当前的行号</td>
</tr>
<tr>
<td align="center"><code>__FILE__</code></td>
<td align="center">得到当前文件的完整绝对路径和文件名</td>
</tr>
<tr>
<td align="center"><code>__DIR__</code></td>
<td align="center">得到文件的完整绝对路径</td>
</tr>
<tr>
<td align="center"><code>__FUNCTION__</code></td>
<td align="center">得到当前函数的名称</td>
</tr>
<tr>
<td align="center"><code>__CLASS__</code></td>
<td align="center">得到当前类的类名</td>
</tr>
<tr>
<td align="center"><code>__METHOD__</code></td>
<td align="center">得到当前类的方法名称</td>
</tr>
<tr>
<td align="center"><code>__TRAIT__</code></td>
<td align="center">得到当前的 TRAIT 名称</td>
</tr>
<tr>
<td align="center"><code>__NAMESPACE__</code></td>
<td align="center">得到当前明明空间的名称</td>
</tr>
</tbody></table>
<blockquote>
<p><strong>7. 预定义常量</strong></p>
</blockquote>
<h4 id="7-0-预定义常量"><a href="#7-0-预定义常量" class="headerlink" title="7.0 预定义常量"></a>7.0 预定义常量</h4><p>@ PHP 提供给大家直接就可以使用的变量，所有的预定义变量都是全局变量</p>
<p>@ <code>$_GET</code> 【 HTTP GET 变量 】 <code>$_GET[&#39;名称&#39;]</code></p>
<p>@ 主要接收以 <code>?</code> 形式传递的数据，像表单以 <code>get</code> 形式发送数据，包括像超链接典型的 <code>?</code> 形式传递参数</p>
<p>@ <code>$_POST</code> 【 HTTP POST 变量 】 <code>$_POST[&#39;名称&#39;]</code></p>
<p>@ 主要接收表单以 <code>post</code> 形式发送的数据</p>
<table>
<thead>
<tr>
<th align="center">常量</th>
<th align="center">作用</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>$GLOBALS</code></td>
<td align="center">超全局变量，包含以下所有的预定义变量</td>
</tr>
<tr>
<td align="center"><code>$_SERVERS</code></td>
<td align="center">服务器和执行环境信息变量</td>
</tr>
<tr>
<td align="center"><code>$_ENV</code></td>
<td align="center">环境变量</td>
</tr>
<tr>
<td align="center"><code>$_COOKIE</code></td>
<td align="center">HTTP Cookies</td>
</tr>
<tr>
<td align="center"><code>$_SESSION</code></td>
<td align="center">HTTP Session 变量</td>
</tr>
<tr>
<td align="center"><code>$_FILES</code></td>
<td align="center">文件上传信息变量</td>
</tr>
<tr>
<td align="center"><code>$_REQUEST</code></td>
<td align="center"><code>$_GET + $_POST + $_COOKIE</code></td>
</tr>
</tbody></table>
<blockquote>
<p><strong>8. 表达式与运算符 【 只要有值得东西都可以叫做表达式 】</strong></p>
</blockquote>
<h4 id="8-0-按照功能分类"><a href="#8-0-按照功能分类" class="headerlink" title="8.0 按照功能分类"></a>8.0 按照功能分类</h4><h5 id="8-0-0-算术运算符"><a href="#8-0-0-算术运算符" class="headerlink" title="8.0.0 算术运算符"></a>8.0.0 算术运算符</h5><p><code>+</code>  <code>-</code>  <code>*</code>  <code>%</code>  <code>**( 幂运算 )</code></p>
<h5 id="8-0-1-递增递减运算符"><a href="#8-0-1-递增递减运算符" class="headerlink" title="8.0.1 递增递减运算符"></a>8.0.1 递增递减运算符</h5><p><code>++</code> <code>--</code></p>
<p>@ 前缀形式</p>
<p><code>$var=1</code> <code>++$var</code> <code>--$var</code> 【 先加减 1，接着在执行 】</p>
<p>@ 后缀形式</p>
<p><code>$var=1</code> <code>$var++</code> <code>$var--</code> 【 先执行，接着在加减 1 】</p>
<p>【 注意1 】数值型支持递增递减运算符。</p>
<p>【 注意2 】布尔型不支持递增递减运算符。</p>
<p>【 注意3 】NULL 只支持递增不支持递减。</p>
<p>【 注意4 】字符串只支持递增，不支持递减。</p>
<h5 id="8-0-2-字符连接符"><a href="#8-0-2-字符连接符" class="headerlink" title="8.0.2 字符连接符"></a>8.0.2 字符连接符</h5><p>@ 英文的 <code>.</code> 来连接字符串</p>
<h5 id="8-0-3-赋值运算符"><a href="#8-0-3-赋值运算符" class="headerlink" title="8.0.3 赋值运算符"></a>8.0.3 赋值运算符</h5><table>
<thead>
<tr>
<th align="center">符号</th>
<th align="center">作用</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>=</code></td>
<td align="center"></td>
</tr>
<tr>
<td align="center"><code>+=</code></td>
<td align="center"><code>$a+=1;</code> =&gt; <code>$a=$a+1;</code></td>
</tr>
<tr>
<td align="center"><code>-=</code></td>
<td align="center"><code>$a-=2;</code> =&gt; <code>$a=$a-2;</code></td>
</tr>
<tr>
<td align="center"><code>*=</code></td>
<td align="center"><code>$a*=3;</code> =&gt; <code>$a=$a*3;</code></td>
</tr>
<tr>
<td align="center"><code>/=</code></td>
<td align="center"><code>$a/=4;</code> =&gt; <code>$a=$a/4;</code></td>
</tr>
<tr>
<td align="center"><code>%=</code></td>
<td align="center"><code>$a%=6;</code> =&gt; <code>$a=$a%6;</code></td>
</tr>
<tr>
<td align="center"><code>.=</code></td>
<td align="center"><code>$str.=&#39;king;&#39;</code> =&gt; <code>$str=$str.&#39;king&#39;;</code></td>
</tr>
</tbody></table>
<h5 id="8-0-4-比较运算符"><a href="#8-0-4-比较运算符" class="headerlink" title="8.0.4 比较运算符"></a>8.0.4 比较运算符</h5><p>@ 比较运算符的结果是布尔类型</p>
<table>
<thead>
<tr>
<th align="center">例子</th>
<th align="center">名称</th>
<th align="center">结果</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>$a == $b</code></td>
<td align="center">等于</td>
<td align="center"><code>TRUE</code>，如果类型转换后 <code>$a</code> 等于 <code>$b</code>。【 只比较值是否相同 】</td>
</tr>
<tr>
<td align="center"><code>$a === $b</code></td>
<td align="center">全等</td>
<td align="center"><code>TRUE</code>，如果 <code>$a</code> 等于 <code>$b</code>，并且它们的类型也相同。【 既要比较值，又要比较类型 】</td>
</tr>
<tr>
<td align="center"><code>$a != $b</code></td>
<td align="center">不等</td>
<td align="center"><code>TRUE</code>，如果类型转换后 <code>$a</code> 不等于 <code>$b</code>。</td>
</tr>
<tr>
<td align="center"><code>$a &lt;&gt; $b</code></td>
<td align="center">不等</td>
<td align="center"><code>TRUE</code>，如果类型转换后 <code>$a</code> 不等于 <code>$b</code>。</td>
</tr>
<tr>
<td align="center"><code>$a !== $b</code></td>
<td align="center">不全等</td>
<td align="center"><code>TRUE</code>，如果 <code>$a</code> 不等于 <code>$b</code>，或者它们的类型不同。</td>
</tr>
<tr>
<td align="center"><code>$a &lt; $b</code></td>
<td align="center">小于</td>
<td align="center"><code>TRUE</code>，如果 <code>$a</code> 严格小于 <code>$b</code>。</td>
</tr>
<tr>
<td align="center"><code>$a &gt; $b</code></td>
<td align="center">大于</td>
<td align="center"><code>TRUE</code>，如果 <code>$a</code> 严格大于 <code>$b</code>。</td>
</tr>
<tr>
<td align="center"><code>$a &lt;= $b</code></td>
<td align="center">小于等于</td>
<td align="center"><code>TRUE</code>，如果 <code>$a</code> 小于或者等于 <code>$b</code>。</td>
</tr>
<tr>
<td align="center"><code>$a &gt;= $b</code></td>
<td align="center">大于等于</td>
<td align="center"><code>TRUE</code>，如果 <code>$a</code> 大于或者等于 <code>$b</code>。</td>
</tr>
<tr>
<td align="center"><code>$a &lt;=&gt; $b</code></td>
<td align="center">结合比较运算符</td>
<td align="center">当 <code>$a</code> 小于、等于、大于 <code>$b</code> 时 分别返回一个小于、等于、大于 0 的 integer 值。 PHP7 开始提供.</td>
</tr>
</tbody></table>
<h5 id="8-0-5-逻辑运算符"><a href="#8-0-5-逻辑运算符" class="headerlink" title="8.0.5 逻辑运算符"></a>8.0.5 逻辑运算符</h5><p>@ 逻辑运算符的结果也是布尔类型</p>
<table>
<thead>
<tr>
<th align="center">例子</th>
<th align="center">名称</th>
<th align="center">结果</th>
</tr>
</thead>
<tbody><tr>
<td align="center"><code>$a and $b</code></td>
<td align="center">And（逻辑与）</td>
<td align="center"><code>TRUE</code>，如果 <code>$a</code> 和 <code>$b</code> 都为 <code>TRUE</code>。</td>
</tr>
<tr>
<td align="center"><code>$a or $b</code></td>
<td align="center">Or（逻辑或）</td>
<td align="center"><code>TRUE</code>，如果 <code>$a</code> 或 <code>$b</code> 任一为 <code>TRUE</code>。</td>
</tr>
<tr>
<td align="center"><code>$a xor $b</code></td>
<td align="center">Xor（逻辑异或）</td>
<td align="center"><code>TRUE</code>，如果 <code>$a</code> 或 <code>$b</code> 任一为 <code>TRUE</code>，但不同时是。</td>
</tr>
<tr>
<td align="center"><code>! $a</code></td>
<td align="center">Not（逻辑非）</td>
<td align="center"><code>TRUE</code>，如果 <code>$a</code> 不为 <code>TRUE</code>。</td>
</tr>
<tr>
<td align="center"><code>$a &amp;&amp; $b</code></td>
<td align="center">And（逻辑与）</td>
<td align="center"><code>TRUE</code>，如果 <code>$a</code> 和 <code>$b</code> 都为 <code>TRUE</code>。</td>
</tr>
<tr>
<td align="center"><code>$a 双竖 $b</code></td>
<td align="center">Or（逻辑或）</td>
<td align="center"><code>TRUE</code>，如果 <code>$a</code> 或 <code>$b</code> 任一为 <code>TRUE</code>。</td>
</tr>
</tbody></table>
<h6 id="a-逻辑与"><a href="#a-逻辑与" class="headerlink" title="a. 逻辑与"></a>a. 逻辑与</h6><p>@ <code>&amp;&amp;</code> 或者 <code>and</code> 代表逻辑与，是并且的意思，两个表达式都为 true ，结果才为 true。 </p>
<p><code>true &amp;&amp; true=true</code>  <code>true &amp;&amp; false=false</code>  <code>false &amp;&amp; true=false</code>  <code>false &amp;&amp; false=false</code>  </p>
<p>【 注意 】如果第一个表达式为 false ，整个结果就为 false ，那第二个表达式就被短路( 执行不到第二个表达式 )。</p>
<h6 id="b-逻辑或"><a href="#b-逻辑或" class="headerlink" title="b. 逻辑或"></a>b. 逻辑或</h6><p>@ <code>||</code> 或者 <code>or</code> 代表逻辑或，是或者的意思，两个表达式有一个为 true ，结果就为 true。</p>
<p><code>true || true=true</code>  <code>true || false=true</code>  <code>false || true=true</code>  <code>false || false=false</code>  </p>
<p>【 注意 】如果第一个表达式为 true ，整个结果就为 true ，那第二个表达式就被短路了。</p>
<h6 id="c-逻辑非"><a href="#c-逻辑非" class="headerlink" title="c. 逻辑非"></a>c. 逻辑非</h6><p>@ <code>!</code>代表逻辑非，是取反。</p>
<p><code>!true=false</code>  <code>!false=true</code></p>
<h6 id="d-逻辑异或"><a href="#d-逻辑异或" class="headerlink" title="d. 逻辑异或"></a>d. 逻辑异或</h6><p>@ <code>xor</code> 代表逻辑异或，是两个表达式不同为 true 或者 false 结果为 true。</p>
<p><code>true xor true=false</code>  <code>true xor false=true</code>  <code>false xor true=true</code>  <code>false xor false=false</code>  </p>
<h5 id="8-0-6-错误抑制符"><a href="#8-0-6-错误抑制符" class="headerlink" title="8.0.6 错误抑制符"></a>8.0.6 错误抑制符</h5><p>@ 抑制错误输出，通过 <code>@</code> 符号加到会产生错误的表达式之前。</p>
<h4 id="8-1-按照运算符的数目"><a href="#8-1-按照运算符的数目" class="headerlink" title="8.1 按照运算符的数目"></a>8.1 按照运算符的数目</h4><h5 id="8-1-0-一元运算符"><a href="#8-1-0-一元运算符" class="headerlink" title="8.1.0 一元运算符"></a>8.1.0 一元运算符</h5><p>@ <code>!</code></p>
<h5 id="8-1-1-二元运算符"><a href="#8-1-1-二元运算符" class="headerlink" title="8.1.1 二元运算符"></a>8.1.1 二元运算符</h5><p>@ <code>+-</code></p>
<h5 id="8-1-2-三元运算符"><a href="#8-1-2-三元运算符" class="headerlink" title="8.1.2 三元运算符"></a>8.1.2 三元运算符</h5><p>@ <code>exp1 ? exp2 : exp3</code>  【 如果 exp1 为 true ，执行 <code>?</code> 之后的 exp2 ，否则执行 <code>:</code> 之后 exp3 】</p>
<h4 id="8-2-PHP-运算符的优先级"><a href="#8-2-PHP-运算符的优先级" class="headerlink" title="8.2 PHP 运算符的优先级"></a>8.2 PHP 运算符的优先级</h4><p>@ 想改变优先级可以通过 <code>()</code></p>
<p>@ 有短路的情况优先考虑短路</p>

          
            <div class='article_footer'>
              
                
  

  

  

  


              
            </div>
          
        </div>
        
          


  <section class='meta' id="footer-meta">
    <div class='new-meta-box'>
      
        
          <div class="new-meta-item date" itemprop="dateUpdated" datetime="2020-08-13T23:41:53+08:00">
  <a class='notlink'>
    <i class="fas fa-edit fa-fw" aria-hidden="true"></i>
    <p>更新于：2020-08-13</p>
  </a>
</div>

        
      
        
          
  
  <div class="new-meta-item meta-tags"><a class="tag" href="/lemonelf/tags/PHP/" rel="nofollow"><i class="fas fa-hashtag fa-fw" aria-hidden="true"></i><p>PHP</p></a></div>


        
      
        
          

        
      
        
          
  <div class="new-meta-item share -mob-share-list">
  <div class="-mob-share-list share-body">
    
      
        <a class="-mob-share-qq" title="" rel="external nofollow noopener noreferrer noopener"
          
          target="_blank" href="http://connect.qq.com/widget/shareqq/index.html?url=https://missglobefish.gitee.io/lemonelf/2020/08/13/PHP%20%E5%85%A5%E9%97%A8%E4%B9%8B%E8%B7%AF/&title=PHP 入门之路 - 河豚吞吞&pics=https://img.vim-cn.com/17/0c7b02722686d1527a1df807dae0794d995860.png&summary=Never too late to learn. "
          
          >
          
            <img src="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qq.png">
          
        </a>
      
    
      
        <a class="-mob-share-qzone" title="" rel="external nofollow noopener noreferrer noopener"
          
          target="_blank" href="https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=https://missglobefish.gitee.io/lemonelf/2020/08/13/PHP%20%E5%85%A5%E9%97%A8%E4%B9%8B%E8%B7%AF/&title=PHP 入门之路 - 河豚吞吞&pics=https://img.vim-cn.com/17/0c7b02722686d1527a1df807dae0794d995860.png&summary=Never too late to learn. "
          
          >
          
            <img src="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/qzone.png">
          
        </a>
      
    
      
        <a class="-mob-share-weibo" title="" rel="external nofollow noopener noreferrer noopener"
          
          target="_blank" href="http://service.weibo.com/share/share.php?url=https://missglobefish.gitee.io/lemonelf/2020/08/13/PHP%20%E5%85%A5%E9%97%A8%E4%B9%8B%E8%B7%AF/&title=PHP 入门之路 - 河豚吞吞&pics=https://img.vim-cn.com/17/0c7b02722686d1527a1df807dae0794d995860.png&summary=Never too late to learn. "
          
          >
          
            <img src="https://cdn.jsdelivr.net/gh/volantis-x/cdn-org/logo/128/weibo.png">
          
        </a>
      
    
  </div>
</div>



        
      
    </div>
  </section>


        
        
          <div class="prev-next">
            
              <a class='prev' href='/lemonelf/2020/08/13/Vue%20%E5%93%8D%E5%BA%94%E5%BC%8F%E5%8E%9F%E7%90%86%202.0%20VS%203.0/'>
                <p class='title'><i class="fas fa-chevron-left" aria-hidden="true"></i>Vue 响应式原理 2.x VS 3.0</p>
                <p class='content'>There’s always time for romance.



Vue 2.x 响应式原理

1. 响应式是什么？简单来说就是数据与页面相互变化，修改数据的时候，视图会进行更新。

例如...</p>
              </a>
            
            
              <a class='next' href='/lemonelf/2020/08/13/Set%20%E5%92%8C%20Map%20%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/'>
                <p class='title'>Set 和 Map 数据结构<i class="fas fa-chevron-right" aria-hidden="true"></i></p>
                <p class='content'>Everything comes full circle.



Set 数据结构

Set 本身是一个构造函数，用来生成 Set 数据结构。
它类似于数组，但是成员的值都是唯一的，没有重复的值...</p>
              </a>
            
          </div>
        
      </section>
    </article>
  




<!-- 根据页面mathjax变量决定是否加载MathJax数学公式js -->


</div>
<aside class='l_side'>
  
  

  
    
    



  <section class="widget toc-wrapper shadow desktop mobile" id="toc-div" >
    
  <header>
    
      <i class="fas fa-list fa-fw" aria-hidden="true"></i><span class='name'>本文目录</span>
    
  </header>


    <div class='content'>
        <ol class="toc"><li class="toc-item toc-level-4"><a class="toc-link" href="#1-0-%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA"><span class="toc-text">1.0 环境搭建</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#1-0-1-Linux-%E7%B3%BB%E7%BB%9F"><span class="toc-text">1.0.1 Linux 系统</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#1-0-2-Window-%E7%B3%BB%E7%BB%9F"><span class="toc-text">1.0.2 Window 系统</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#1-1-%E7%BC%96%E8%BE%91%E5%99%A8%E5%AE%89%E8%A3%85"><span class="toc-text">1.1 编辑器安装</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#2-0-%E6%96%87%E6%A1%A3%E7%BB%93%E6%9E%84"><span class="toc-text">2.0 文档结构</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#2-1-%E6%A0%87%E8%AE%B0"><span class="toc-text">2.1 标记</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#2-1-0-%E6%A0%87%E5%87%86%E9%A3%8E%E6%A0%BC"><span class="toc-text">2.1.0 标准风格</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#2-1-1-%E7%9F%AD%E9%A3%8E%E6%A0%BC"><span class="toc-text">2.1.1 短风格</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#2-1-2-ASP%E9%A3%8E%E6%A0%BC"><span class="toc-text">2.1.2 ASP风格</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#2-2-%E6%96%87%E6%A1%A3%E7%BB%84%E6%88%90"><span class="toc-text">2.2 文档组成</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#2-3-%E8%AF%AD%E6%B3%95%E8%A7%84%E8%8C%83"><span class="toc-text">2.3 语法规范</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#2-4-%E6%B3%A8%E9%87%8A"><span class="toc-text">2.4 注释</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#3-0-%E5%A3%B0%E6%98%8E%E5%8F%98%E9%87%8F"><span class="toc-text">3.0 声明变量</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#3-1-%E4%BD%BF%E7%94%A8%E5%8F%98%E9%87%8F"><span class="toc-text">3.1 使用变量</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#4-0-%E4%B8%BB%E8%A6%81%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B"><span class="toc-text">4.0 主要数据类型</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#4-0-0-%E6%A0%87%E9%87%8F%E7%B1%BB%E5%9E%8B-%E5%8F%AA%E8%83%BD%E5%AD%98%E5%82%A8%E5%8D%95%E4%B8%80%E6%95%B0%E6%8D%AE"><span class="toc-text">4.0.0 标量类型 ( 只能存储单一数据 )</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#4-0-1-%E5%A4%8D%E5%90%88%E7%B1%BB%E5%9E%8B"><span class="toc-text">4.0.1 复合类型</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#4-0-2-%E7%89%B9%E6%AE%8A%E7%B1%BB%E5%9E%8B"><span class="toc-text">4.0.2 特殊类型</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#4-1-%E4%BC%AA%E7%B1%BB%E5%9E%8B"><span class="toc-text">4.1 伪类型</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#5-0-%E8%87%AA%E5%8A%A8%E8%BD%AC%E6%8D%A2-%E9%9A%90%E5%BC%8F%E8%BD%AC%E6%8D%A2-%E2%80%94-%E3%80%90-%E7%A8%8B%E5%BA%8F%E4%BC%9A%E6%A0%B9%E6%8D%AE%E4%B8%8A%E4%B8%8B%E6%96%87%E7%8E%AF%E5%A2%83%E8%87%AA%E5%8A%A8%E7%9A%84%E8%BF%9B%E8%A1%8C%E8%BD%AC%E6%8D%A2-%E3%80%91"><span class="toc-text">5.0 自动转换 ( 隐式转换 ) — 【 程序会根据上下文环境自动的进行转换 】</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#5-0-0-%E5%85%B6%E5%AE%83%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2%E6%88%90%E6%95%B0%E5%80%BC%E5%9E%8B"><span class="toc-text">5.0.0 其它类型转换成数值型</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#5-0-1-%E5%85%B6%E5%AE%83%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2%E6%88%90%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%9E%8B"><span class="toc-text">5.0.1 其它类型转换成字符串型</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#5-0-2-%E5%85%B6%E5%AE%83%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2%E6%88%90%E5%B8%83%E5%B0%94%E7%B1%BB%E5%9E%8B-%E3%80%90-%E5%81%87-%E3%80%91"><span class="toc-text">5.0.2 其它类型转换成布尔类型 【 假 】</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#5-1-%E5%BC%BA%E5%88%B6%E8%BD%AC%E6%8D%A2-%E6%98%BE%E7%A4%BA%E8%BD%AC%E6%8D%A2"><span class="toc-text">5.1 强制转换 ( 显示转换 )</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#5-1-0-%E4%B8%B4%E6%97%B6%E8%BD%AC%E6%8D%A2-%E3%80%90-%E4%B8%B4%E6%97%B6%E8%BD%AC%E6%8D%A2%E4%B8%8D%E6%94%B9%E5%8F%98%E5%8F%98%E9%87%8F%E6%9C%AC%E8%BA%AB%E7%9A%84%E7%B1%BB%E5%9E%8B-%E3%80%91"><span class="toc-text">5.1.0 临时转换 【 临时转换不改变变量本身的类型 】</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#5-1-1-%E6%B0%B8%E4%B9%85%E8%BD%AC%E6%8D%A2"><span class="toc-text">5.1.1 永久转换</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#5-1-2-%E9%80%9A%E8%BF%87%E5%8F%98%E9%87%8F%E5%87%BD%E6%95%B0%E5%BA%93%E6%A3%80%E6%B5%8B%E5%8F%98%E9%87%8F%E7%9A%84%E7%B1%BB%E5%9E%8B-%E3%80%90-is-var-%E3%80%91"><span class="toc-text">5.1.2 通过变量函数库检测变量的类型 【 is_*( $var ) 】</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#6-0-%E7%B3%BB%E7%BB%9F%E5%B8%B8%E9%87%8F-%E3%80%90-PHP-%E6%8F%90%E5%89%8D%E7%BB%99%E5%A4%A7%E5%AE%B6%E6%8F%90%E4%BE%9B%E7%9A%84%EF%BC%8C%E6%8B%BF%E6%9D%A5%E5%B0%B1%E5%8F%AF%E4%BB%A5%E7%9B%B4%E6%8E%A5%E4%BD%BF%E7%94%A8-%E3%80%91"><span class="toc-text">6.0 系统常量 【 PHP 提前给大家提供的，拿来就可以直接使用 】</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#6-1-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%B8%B8%E9%87%8F"><span class="toc-text">6.1 自定义常量</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#6-1-0-%E5%AE%9A%E4%B9%89%E5%B8%B8%E9%87%8F"><span class="toc-text">6.1.0 定义常量</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#6-1-1-%E4%BD%BF%E7%94%A8%E5%B8%B8%E9%87%8F-%E3%80%90-%E7%9B%B4%E6%8E%A5%E4%BD%BF%E7%94%A8%E5%B8%B8%E9%87%8F%E7%9A%84%E5%90%8D%E7%A7%B0%E5%8D%B3%E5%8F%AF-%E3%80%91"><span class="toc-text">6.1.1 使用常量 【 直接使用常量的名称即可 】</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#6-1-2-%E6%A3%80%E6%B5%8B%E5%B8%B8%E9%87%8F%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8"><span class="toc-text">6.1.2 检测常量是否存在</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#6-1-3-%E8%8E%B7%E5%8F%96%E6%89%80%E6%9C%89%E5%B7%B2%E5%AE%9A%E4%B9%89%E7%9A%84%E5%B8%B8%E9%87%8F"><span class="toc-text">6.1.3 获取所有已定义的常量</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#6-2-%E9%AD%94%E6%9C%AF%E5%B8%B8%E9%87%8F"><span class="toc-text">6.2 魔术常量</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#7-0-%E9%A2%84%E5%AE%9A%E4%B9%89%E5%B8%B8%E9%87%8F"><span class="toc-text">7.0 预定义常量</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#8-0-%E6%8C%89%E7%85%A7%E5%8A%9F%E8%83%BD%E5%88%86%E7%B1%BB"><span class="toc-text">8.0 按照功能分类</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#8-0-0-%E7%AE%97%E6%9C%AF%E8%BF%90%E7%AE%97%E7%AC%A6"><span class="toc-text">8.0.0 算术运算符</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#8-0-1-%E9%80%92%E5%A2%9E%E9%80%92%E5%87%8F%E8%BF%90%E7%AE%97%E7%AC%A6"><span class="toc-text">8.0.1 递增递减运算符</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#8-0-2-%E5%AD%97%E7%AC%A6%E8%BF%9E%E6%8E%A5%E7%AC%A6"><span class="toc-text">8.0.2 字符连接符</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#8-0-3-%E8%B5%8B%E5%80%BC%E8%BF%90%E7%AE%97%E7%AC%A6"><span class="toc-text">8.0.3 赋值运算符</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#8-0-4-%E6%AF%94%E8%BE%83%E8%BF%90%E7%AE%97%E7%AC%A6"><span class="toc-text">8.0.4 比较运算符</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#8-0-5-%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97%E7%AC%A6"><span class="toc-text">8.0.5 逻辑运算符</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#8-0-6-%E9%94%99%E8%AF%AF%E6%8A%91%E5%88%B6%E7%AC%A6"><span class="toc-text">8.0.6 错误抑制符</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#8-1-%E6%8C%89%E7%85%A7%E8%BF%90%E7%AE%97%E7%AC%A6%E7%9A%84%E6%95%B0%E7%9B%AE"><span class="toc-text">8.1 按照运算符的数目</span></a><ol class="toc-child"><li class="toc-item toc-level-5"><a class="toc-link" href="#8-1-0-%E4%B8%80%E5%85%83%E8%BF%90%E7%AE%97%E7%AC%A6"><span class="toc-text">8.1.0 一元运算符</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#8-1-1-%E4%BA%8C%E5%85%83%E8%BF%90%E7%AE%97%E7%AC%A6"><span class="toc-text">8.1.1 二元运算符</span></a></li><li class="toc-item toc-level-5"><a class="toc-link" href="#8-1-2-%E4%B8%89%E5%85%83%E8%BF%90%E7%AE%97%E7%AC%A6"><span class="toc-text">8.1.2 三元运算符</span></a></li></ol></li><li class="toc-item toc-level-4"><a class="toc-link" href="#8-2-PHP-%E8%BF%90%E7%AE%97%E7%AC%A6%E7%9A%84%E4%BC%98%E5%85%88%E7%BA%A7"><span class="toc-text">8.2 PHP 运算符的优先级</span></a></li></ol>
    </div>
  </section>


  


</aside>



    </div>
    
  
  <footer class="clearfix">
    <br><br>
    
      
        <div class="aplayer-container">
          

  
    <meting-js
      theme='#1BCDFC'
      autoplay='false'
      volume='0.7'
      loop='all'
      order='list'
      fixed='false'
      list-max-height='320px'
      server='netease'
      type='playlist'
      id='3175833810'
      list-folded='true'>
    </meting-js>
  


        </div>
      
    
      
        <br>
        <div class="social-wrapper">
          
            
              <a href="https://missglobefish.github.io/"
                class="social fas fa-rss flat-btn"
                target="_blank"
                rel="external nofollow noopener noreferrer">
              </a>
            
          
            
              <a href="https://missglobefish.github.io/"
                class="social fas fa-envelope flat-btn"
                target="_blank"
                rel="external nofollow noopener noreferrer">
              </a>
            
          
            
              <a href="https://gitee.com/MissGlobeFish"
                class="social fab fa-github flat-btn"
                target="_blank"
                rel="external nofollow noopener noreferrer">
              </a>
            
          
            
              <a href="https://music.163.com/#/user/home?id=63035382"
                class="social fas fa-headphones-alt flat-btn"
                target="_blank"
                rel="external nofollow noopener noreferrer">
              </a>
            
          
        </div>
      
    
      
        <div><p>Blog content follows the <a target="_blank" rel="noopener" href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en">Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) License</a></p>
</div>
      
    
      
        Use
        <a href="https://volantis.js.org/" target="_blank" class="codename">Volantis</a>
        as theme, total visits
          <span id="busuanzi_value_site_pv"><i class="fas fa-circle-notch fa-spin fa-fw" aria-hidden="true"></i></span>
          times
        
      
    
      
        <div class='copyright'>
        <p><a href="/">Copyright © 2017-2020 XXX</a></p>

        </div>
      
    
  </footer>


    <a class="s-top fas fa-arrow-up fa-fw" href='javascript:void(0)'></a>
  </div>
  <div>
    
      
  

  <div id="rightmenu-wrapper">
    <ul class="list-v rightmenu" id="rightmenu-content">
      <li class='option'>
        <a class='vlts-menu opt fix-cursor-default' id='menu-copy-text' onclick='document.execCommand("copy")'><i class='fa fa-copy fa-fw'></i>Copy Text</a>
        <hr id='hr-text'>
        <a class='vlts-menu opt fix-cursor-default' id='menu-copy-href'><i class='fa fa-link fa-fw'></i>Copy Link</a>
        <a class='vlts-menu opt fix-cursor-default' id='menu-open-href'><i class='fa fa-external-link-square-alt fa-fw'></i>Open Link in New Tab</a>
        <hr id='hr-href'>
        <a class='vlts-menu opt fix-cursor-default' id='menu-copy-src'><i class='fa fa-image fa-fw'></i>Copy Image Link</a>
        <hr id='hr-src'>
      </li>
      <li class='navigation'>
        <a class='nav icon-only fix-cursor-default' onclick='history.back()'><i class='fa fa-arrow-left fa-fw'></i></a>
        <a class='nav icon-only fix-cursor-default' onclick='history.forward()'><i class='fa fa-arrow-right fa-fw'></i></a>
        <a class='nav icon-only fix-cursor-default' onclick='window.location.reload()'><i class='fa fa-redo fa-fw'></i></a>
        <a class='nav icon-only fix-cursor-default' href='/'><i class='fa fa-home fa-fw'></i></a>
      </li>
      <hr>
      
        
      
        
          
    <li>
      <a class='vlts-menu fix-cursor-default' href=https://gitee.com/MissGlobeFish/lemonElf
        
        
        
        
          id="https:giteecomMissGlobeFishlemonElf"
        >
        <i class='fas fa-envelope fa-fw'></i> 提出问题
      </a>
    </li>
  
        
      
        
      
        
          
    <li>
      <a class='vlts-menu fix-cursor-default' href=https://missglobefish.github.io/
        
        
        
        
          id="https:missglobefishgithubio"
        >
        <i class='fa fa-fan fa-spin fa-fw'></i> 生活博客
      </a>
    </li>
  
        
      
        
          <hr>
        
      
        
          
    <li>
      <a class='vlts-menu fix-cursor-default' href=https://gitee.com/MissGlobeFish/lemonElf
        
        
        
        
          id="https:giteecomMissGlobeFishlemonElf"
        >
        <i class='fa fa-code-branch fa-fw'></i> 本站源码
      </a>
    </li>
  
        
      
        
      
        
          <hr>
        
      
        
          
    <li>
      <a class='vlts-menu fix-cursor-default' 
        
        
        
          onclick="document.execCommand('print')"
        
        >
        <i class='fa fa-print fa-fw'></i> 打印页面
      </a>
    </li>
  
        
      
        
          <hr>
        
      
        
          <li class='music name'>
            <p class='nav music-title fix-cursor-default'></p>
          </li>
          <li class='music ctrl'>
            <a class='nav icon-only backward fix-cursor-default' onclick='aplayerBackward()'><i class='fa fa-step-backward fa-fw'></i></a>
            <a class='nav icon-only toggle fix-cursor-default' onclick='aplayerToggle()'><i class='fa fa-play fa-fw'></i></a>
            <a class='nav icon-only forward fix-cursor-default' onclick='aplayerForward()'><i class='fa fa-step-forward fa-fw'></i></a>
          </li>
          <li class='music volume'>
            <a class='nav volume'>
              <div class="aplayer-volume-bar-wrap">
                <div class="aplayer-volume-bar fix-cursor-pointer">
                  <div class="aplayer-volume"></div>
                  <i class='left fa fa-volume-off fa-fw'></i>
                  <i class='right fa fa-volume-up fa-fw'></i>
                </div>
              </div>
            </a>
          </li>
        
      
    </ul>
  </div>

  <script>
    window.document.oncontextmenu = function (event) {
      if (event.ctrlKey) return true;
      if (/Android|webOS|BlackBerry/i.test(navigator.userAgent)) return true;
      return popMenu(event);
    };
    document.addEventListener("click", function (event) {
      var mymenu = document.getElementById('rightmenu-wrapper');
      mymenu.style.display = "none";
    });
    function popMenu(event) {
      var mymenu = document.getElementById('rightmenu-wrapper');
      var menuContent = document.getElementById('rightmenu-content');
      var screenWidth = document.documentElement.clientWidth || document.body.clientWidth;
      var screenHeight = document.documentElement.clientHeight || document.body.clientHeight;
      mymenu.style.left = event.clientX + "px"; // 获取鼠标位置
      mymenu.style.top = event.clientY + "px";
      mymenu.style.display = 'block';
      if (event.clientX * 2 > screenWidth) {
        menuContent.classList.add('left');
      } else {
        menuContent.classList.remove('left');
      }
      if (event.clientY * 2 > screenHeight) {
        menuContent.classList.add('top');
      } else {
        menuContent.classList.remove('top');
      }

      let hrText = document.getElementById('hr-text');
      let hrSrc = document.getElementById('hr-src');
      let hrHref = document.getElementById('hr-href');

      // 选中图片
      let copySrc = document.getElementById('menu-copy-src');
      if (copySrc != undefined) {
        if (event.target.currentSrc) {
          copySrc.style.display = 'block';
          copySrc.addEventListener("click", function (e) {
            copyString(event.target.currentSrc);
          },{once: true});
          hrSrc.style.display = 'block';
        } else {
          copySrc.style.display = 'none';
          hrSrc.style.display = 'none';
        }
      }

      // 选中按钮
      // 判断是不是按钮
      let href = '';
      if (event.path) {
        for (i = 0; i < event.path.length; i++) {
          if (event.path[i].href != undefined && event.path[i].href.length > 0) {
            href = event.path[i].href;
          }
        }
      }

      let copyText = document.getElementById('menu-copy-text');
      copyText.style.display = 'none';
      hrText.style.display = 'none';
      if (href.length == 0) {
        // 选中文本
        if (window.getSelection().toString()) {
          copyText.style.display = 'block';
          hrText.style.display = 'block';
        }
      }

      // 在新标签页打开
      let openHref = document.getElementById('menu-open-href');
      if (openHref != undefined) {
        if (href.length > 0) {
          openHref.style.display = 'block';
          openHref.addEventListener("click", function (e) {
            window.open(href);
          },{once: true});
          hrHref.style.display = 'block';
        } else {
          openHref.style.display = 'none';
          hrHref.style.display = 'none';
        }
      }
      // 复制链接
      let copyHref = document.getElementById('menu-copy-href');
      if (copyHref != undefined) {
        if (href.length > 0) {
          copyHref.style.display = 'block';
          copyHref.addEventListener("click", function (e) {
            copyString(href);
          },{once: true});
        } else {
          copyHref.style.display = 'none';
        }
      }

      // 有音乐播放器
      if (true == true) {
        // 如果有aplayer，初始化一下
      	try {
      		checkAPlayer();
          updateTitle();
      	} catch (error) {
      		console.log(error);
      	}
      }

      return false; // 该行代码确保系统自带的右键菜单不会被调出
    }
    function hideMenu() {
      document.getElementById('rightmenu-wrapper').style.display = 'none';
    }
    function copyString(str) {
      const input = document.createElement('input');
      input.setAttribute('readonly', 'readonly');
      document.body.appendChild(input);
      input.setAttribute('value', str);
      input.select();
      document.execCommand('copy');
      document.body.removeChild(input);
    }
    document.execCommand('click');
  </script>


    
    
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5/dist/jquery.min.js"></script>



  <script>
    
    var SEARCH_SERVICE = "hexo" || "hexo";
    var ROOT = "/lemonelf/" || "/";
    if (!ROOT.endsWith('/')) ROOT += '/';
  </script>





  <script async src="https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/instant_page.js" type="module" defer integrity="sha384-OeDn4XE77tdHo8pGtE1apMPmAipjoxUQ++eeJa6EtJCfHlvijigWiJpD7VDPWXV1"></script>



  
  
  
    
<script src="https://cdn.jsdelivr.net/npm/jquery-backstretch@2.1.18/jquery.backstretch.min.js"></script>

    <script type="text/javascript">
      $(function(){
        var imgs=["https://gitee.com/wallpapers/minimalist/raw/master/2020/001.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/002.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/003.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/004.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/005.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/006.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/012.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/016.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/019.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/025.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/033.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/034.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/035.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/038.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/039.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/042.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/042.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/046.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/051.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/052.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/054.jpg", "https://gitee.com/wallpapers/minimalist/raw/master/2020/056.jpg"];
        if ('true' == 'true') {
          function shuffle(arr){
            /*From countercurrent-time*/
            var n = arr.length;
            while(n--) {
              var index = Math.floor(Math.random() * n);
              var temp = arr[index];
              arr[index] = arr[n];
              arr[n] = temp;
            }
          }
          shuffle(imgs);
        }
        if ('.cover') {
          $('.cover').backstretch(
            imgs,
          {
            duration: "20000",
            fade: "1500"
          });
        } else {
          $.backstretch(
            imgs,
          {
            duration: "20000",
            fade: "1500"
          });
        }
      });
    </script>
  



  <script>
    let APlayerController = new Object();
    APlayerController.id = '3175833810';  // 设定全局音乐播放ID
    APlayerController.volume = '0.7';
  </script>
  
    
<script src="https://cdn.jsdelivr.net/npm/aplayer@1.10/dist/APlayer.min.js"></script>

  
    
<script src="https://cdn.jsdelivr.net/npm/meting@2.0/dist/Meting.min.js"></script>

  




  
  
<script src="/lemonelf/js/valine.js"></script>


<script>
  var GUEST_INFO = ['nick', 'mail', 'link'];
  var meta = 'nick,mail,link'.split(',').filter(function (item) {
    return GUEST_INFO.indexOf(item) > -1
  });
  var REQUIRED_FIELDS = ['nick', 'mail', 'link'];
  var requiredFields = 'nick,mail'.split(',').filter(function (item) {
    return REQUIRED_FIELDS.indexOf(item) > -1
  });

  function emoji(path, idx, ext) {
    return path + "/" + path + "-" + idx + "." + ext;
  }

  var emojiMaps = {};
  for (var i = 1; i <= 54; i++) {
    emojiMaps['tieba-' + i] = emoji('tieba', i, 'png');
  }
  for (var i = 1; i <= 101; i++) {
    emojiMaps['qq-' + i] = emoji('qq', i, 'gif');
  }
  for (var i = 1; i <= 116; i++) {
    emojiMaps['aru-' + i] = emoji('aru', i, 'gif');
  }
  for (var i = 1; i <= 125; i++) {
    emojiMaps['twemoji-' + i] = emoji('twemoji', i, 'png');
  }
  for (var i = 1; i <= 4; i++) {
    emojiMaps['weibo-' + i] = emoji('weibo', i, 'png');
  }

  function pjax_valine() {
    var valinePath = $.trim($('#valine-path').text()) === "none" ?
            window.location.pathname : $.trim($('#valine-path').text());

    var valinePlaceholder = $.trim($('#valine-placeholder').text()) === "none" ?
            "快来评论吧~" : $.trim($('#valine-placeholder').text());

    var ALLPATH = '';
    if(ALLPATH != '') valinePath = ALLPATH;

    var valine = new Valine();
    valine.init({
      el: '#valine_container',
      meta: meta,
      placeholder: valinePlaceholder,
      path: valinePath,
      appId: "",
      appKey: "",
      pageSize: '10',
      avatar: 'robohash',
      lang: 'zh-cn',
      visitor: 'true',
      highlight: 'true',
      mathJax: 'false',
      enableQQ: 'true',
      requiredFields: requiredFields,
      emojiCDN: 'https://cdn.jsdelivr.net/gh/volantis-x/cdn-emoji/valine/',
      emojiMaps: emojiMaps
    })
  }

  $(function () {
    pjax_valine();
  });
</script>




<!-- darkmodejs -->


<!-- 复制 -->

  <script src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js"></script>
<script>
    var clipboard = new ClipboardJS('.btn-copy', {
        target: function (trigger) {
            return trigger.nextElementSibling
        }
    });
    function wait(callback, seconds) {
        var timelag = null;
        timelag = window.setTimeout(callback, seconds)
    }
    function pjax_initCopyCode() {
        var copyHtml = '';
        copyHtml += '<button class="btn-copy" data-clipboard-snippet="">';
        copyHtml += '<i class="fas fa-copy"></i><span>COPY</span>';
        copyHtml += '</button>';
        $(".highlight .code pre").before(copyHtml);
        $(".article pre code").before(copyHtml);
        clipboard.off('success').on('success', function (e) {
            let $btn = $(e.trigger);
            $btn.addClass('copied');
            let $icon = $($btn.find('i'));
            $icon.removeClass('fa-copy');
            $icon.addClass('fa-check-circle');
            let $span = $($btn.find('span'));
            $span[0].innerText = 'COPIED';
            wait(function () {
                $icon.removeClass('fa-check-circle');
                $icon.addClass('fa-copy');
                $span[0].innerText = 'COPY'
            }, 2000)
        });
        clipboard.off('error').on('error', function (e) {
            e.clearSelection();
            let $btn = $(e.trigger);
            $btn.addClass('copy-failed');
            let $icon = $($btn.find('i'));
            $icon.removeClass('fa-copy');
            $icon.addClass('fa-times-circle');
            let $span = $($btn.find('span'));
            $span[0].innerText = 'COPY FAILED';
            wait(function () {
                $icon.removeClass('fa-times-circle');
                $icon.addClass('fa-copy');
                $span[0].innerText = 'COPY'
            }, 2000)
        })
    }
    $(function () {
        pjax_initCopyCode()
    });
</script>


<!-- scrollreveal -->

<!-- ******************************** -->

<!-- fancybox -->
<script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>
<script>
  function pjax_fancybox() {
    $(".article-entry").find("img").not('.inline').not('a img').each(function () { //渲染 fancybox
      var element = document.createElement("a"); // a 标签
      $(element).attr("class", "fancybox");
      $(element).attr("pjax-fancybox", "");  // 过滤 pjax
      $(element).attr("href", $(this).attr("src"));
      if ($(this).attr("data-original")) {
        $(element).attr("href", $(this).attr("data-original"));
      }
      $(element).attr("data-fancybox", "images");
      var caption = "";   // 描述信息
      if ($(this).attr('alt')) {  // 判断当前页面是否存在描述信息
        $(element).attr('data-caption', $(this).attr('alt'));
        caption = $(this).attr('alt');
      }
      var div = document.createElement("div");
      $(div).addClass("fancybox");
      $(this).wrap(div); // 最外层套 div ，其实主要作用还是 class 样式
      var span = document.createElement("span");
      $(span).addClass("image-caption");
      $(span).text(caption); // 加描述
      $(this).after(span);  // 再套一层描述
      $(this).wrap(element);  // 最后套 a 标签
    })
    $(".article-entry").find("img").fancybox({
      selector: '[data-fancybox="images"]',
      hash: false,
      loop: false,
      closeClick: true,
      helpers: {
        overlay: {closeClick: true}
      },
      buttons: [
        "zoom",
        "close"
      ]
    });
  };
  $(function () {
    pjax_fancybox();
  });
</script>

<!-- ******************************** -->


  
<script src="/lemonelf/js/app.js"></script>




  
    
<script src="/lemonelf/js/search.js"></script>

  



  <script defer src="https://cdn.jsdelivr.net/gh/volantis-x/cdn-busuanzi@2.3/js/busuanzi.pure.mini.js" data-pjax></script>



  
<script src="https://cdn.jsdelivr.net/npm/node-waves@0.7.6/dist/waves.min.js"></script>

  <script type="text/javascript">
    $(function () {
      Waves.attach('.flat-btn', ['waves-button']);
      Waves.attach('.float-btn', ['waves-button', 'waves-float']);
      Waves.attach('.float-btn-light', ['waves-button', 'waves-float', 'waves-light']);
      Waves.attach('.flat-box', ['waves-block']);
      Waves.attach('.float-box', ['waves-block', 'waves-float']);
      Waves.attach('.waves-image');
      Waves.init();
    });
  </script>



  
<script src="https://cdn.jsdelivr.net/gh/volantis-x/cdn-volantis@2/js/comment_typing.js"></script>







    
      


<script src="https://cdn.jsdelivr.net/npm/pjax@0.2.8/pjax.min.js"></script>

<!-- 样式位于：source/css/_third-party/pjaxanimate.styl -->

<div class="pjax-animate">
  
    <script src="https://cdn.jsdelivr.net/npm/nprogress@0.2.0/nprogress.min.js"></script>
    <div id="loading-bar-wrapper"><script>NProgress.configure({parent:"#loading-bar-wrapper",trickleSpeed: 100})</script></div>
    <script>
      window.ShowLoading = function() {
        NProgress.start();
      };
      window.HideLoading = function() {
        NProgress.done();
      }
    </script>
  
</div>

<script>
    var pjax;
    document.addEventListener('DOMContentLoaded', function () {
      pjax = new Pjax({
        elements: 'a[href]:not([href^="#"]):not([href="javascript:void(0)"]):not([pjax-fancybox])',
        selectors: [
          "title",
          "#pjax-container",
          "#pjax-header-nav-list"
        ],
        cacheBust: false,   // url 地址追加时间戳，用以避免浏览器缓存
        timeout: 5000
      });
    });

    document.addEventListener('pjax:send', function (e) {
      window.stop(); // 相当于点击了浏览器的停止按钮

      try {
        var currentUrl = window.location.pathname;
        var targetUrl = e.triggerElement.href;
        var banUrl = [""];
        if (banUrl[0] != "") {
          banUrl.forEach(item => {
            if(currentUrl.indexOf(item) != -1 || targetUrl.indexOf(item) != -1) {
              window.location.href = targetUrl;
            }
          });
        }
      } catch (error) {}

      window.subData = null; // 移除标题（用于一二级导航栏切换处）
      $.fancybox.close();    // 关闭弹窗
      $('.nav-main').find('.list-v').not('.menu-phone').css("display","none"); // 移除小尾巴
      $('.menu-phone.list-v').css("display","none"); // 移除小尾巴
      $('.l_header .switcher .s-search').removeClass('active'); // 关闭移动端激活的搜索框
      $('.l_header').removeClass('z_search-open'); // 关闭移动端激活的搜索框
      $('.wrapper').removeClass('sub'); // 跳转页面时关闭二级导航

      $('.s-top').unbind('click');   // 解绑
      $('.menu a').unbind('click');  // 解绑
      $(window).unbind('resize');    // 解绑
      $(window).unbind('scroll');    // 解绑
      $(document).unbind('scroll');  // 解绑
      $(document).unbind('click');   // 解绑
      $('body').unbind('click');     // 解绑
      window.ShowLoading();
    });

    document.addEventListener('pjax:complete', function () {
      // 关于百度统计对 SPA 页面的处理：
      // 方案一：百度统计>管理>单页应用设置中，打开开启按钮即可对SPA进行统计。 https://tongji.baidu.com/web/help/article?id=324
      // 方案二：取消注释下列代码。 https://tongji.baidu.com/web/help/article?id=235
      // 

      // 关于谷歌统计对 SPA 页面的处理：
      // 当应用以动态方式加载内容并更新地址栏中的网址时，也应该更新通过 gtag.js 存储的网页网址。
      // https://developers.google.cn/analytics/devguides/collection/gtagjs/single-page-applications?hl=zh-cn
      

      $('.nav-main').find('.list-v').not('.menu-phone').removeAttr("style",""); // 移除小尾巴的移除
      $('.menu-phone.list-v').removeAttr("style",""); // 移除小尾巴的移除
      $('script[data-pjax], .pjax-reload script').each(function () {
        $(this).parent().append($(this).remove());
      });

      try{
        pjax_fancybox();
        
          
          if ('.cover') {
            $('.cover').backstretch("resize");
          } else {
            $.backstretch("resize");
          }
        
        
        
        
          pjax_initCopyCode();
        
        
          pjax_valine();
        
        
        
        
        
      } catch (e) {
        console.log(e);
      }
      window.HideLoading();
    });

    document.addEventListener('pjax:error', function (e) {
      window.HideLoading();
      window.location.href = e.triggerElement.href;
    });
</script>

    
  </div>
</body>
</html>
